﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Sita.Entities;
using Sita.Data.Repositories;

namespace Sita.MainModule.Services
{
    public class ModuleService
    {
        ModuleRepository ModuleRepository;

        public ModuleService()
        {
            ModuleRepository = new ModuleRepository();
        }

        public int AddModule(Module module)
        {
            ModuleRepository.Add(module);
            ModuleRepository.StoreContext.Commit();

            return module.ModuleID;
        }

        public bool ModifyModule(Module module)
        {
            ModuleRepository.Modify(module);

            ModuleRepository.StoreContext.Commit();

            return true;
        }

        public IList<Module> GetModules()
        {
            return ModuleRepository.GetAll().ToList();
        }

        public IList<Module> GetModulesWithPermissions()
        {
            return ModuleRepository.GetModulesWithPermissions();
        }

        //public IList<Module> GetPaginatedModules(int pageIndex, int pageSize, string sortColumn, bool ascending, int groupID, out int totalRows)
        //{
        //    if (groupID == -1)
        //    {
        //        return ModuleRepository.GetAllPaginatedWithInclude(pageIndex, pageSize, sortColumn,
        //            ascending, "Group", out totalRows).ToList();
        //    }
        //    else
        //    {
        //        return ModuleRepository.GetAllPaginatedWithInclude(pageIndex, pageSize,
        //            new DirectSpecification<Module>(m => m.GroupID == groupID),
        //                sortColumn, ascending, "Group", out totalRows).ToList();
        //    }
        //}

        public Module GetModuleByID(int moduleID)
        {
            return ModuleRepository.GetByIDWithBusiness(moduleID);
        }

        //public Module GetModuleByCode(string code)
        //{
        //    return ModuleRepository.GetFiltered(m => m.Code == code).SingleOrDefault();
        //}

        //public Module GetModuleByPosition(int groupID, int position)
        //{
        //    return ModuleRepository.GetFiltered(m => m.GroupID == groupID && m.Position == position).FirstOrDefault();
        //}

        public bool DeleteModule(Module module)
        {
            for (int i = 0; i < module.ModuleBusinesses.Count; i++)
            {
                module.ModuleBusinesses[i].MarkAsDeleted();
                i--;
            }

            ModuleRepository.Delete(module);
            ModuleRepository.StoreContext.Commit();

            return true;
        }

        public IList<Module> GetModulesWithPermissionsByBusinessUnitID(int buID)
        {
            if (buID == -1)
            {
                return ModuleRepository.GetModulesWithPermissions();
            }
            else
            {
                return ModuleRepository.GetWithPermissionsByBusinessUnitID(buID);
            }
        }

        public IList<Module> GetModulesWithUserPermissionsByUserID(int userID)
        {

            return ModuleRepository.GetModulesWithUserPermissionsByUserID(userID);


        }
    }
}
